package com.ics.atable.chat.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ics.atable.chat.model.entity.DataCellWide;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 数据单元宽表 Mapper
 * 使用第二数据源（atable-user 数据库）
 *
 * @author system
 */
@Mapper
public interface DataCellWideMapper extends BaseMapper<DataCellWide> {

    /**
     * 根据查询条件查询数据
     * 地名匹配逻辑：模糊匹配，支持部分地名搜索
     * 例如：搜索"洪马村"可以匹配到"上洪马村"、"下洪马村"等
     *
     * @param fullItemName   指标全量名称
     * @param fullColumnName 填报列全量名称
     * @param tableYear      年份
     * @param taskQuarter    季度
     * @param fullOrgName    区划名（支持模糊匹配）
     * @return 查询结果列表
     */
    @Select("SELECT full_item_name, full_column_name, table_year, task_quarter, full_org_name, cell_value " +
            "FROM t_data_cell_wide " +
            "WHERE full_item_name = #{fullItemName} " +
            "AND full_column_name = #{fullColumnName} " +
            "AND table_year = #{tableYear} " +
            "AND task_quarter = #{taskQuarter} " +
            "AND full_org_name LIKE CONCAT('%', #{fullOrgName}, '%')")
    List<DataCellWide> queryByConditions(
            @Param("fullItemName") String fullItemName,
            @Param("fullColumnName") String fullColumnName,
            @Param("tableYear") String tableYear,
            @Param("taskQuarter") String taskQuarter,
            @Param("fullOrgName") String fullOrgName
    );

    /**
     * 根据多个地区名称批量查询数据
     * 使用动态 SQL 构建多个 OR 条件进行模糊匹配
     *
     * @param fullItemName   指标全量名称
     * @param fullColumnName 填报列全量名称
     * @param tableYear      年份
     * @param taskQuarter    季度
     * @param orgNames       区划名列表（支持模糊匹配）
     * @return 查询结果列表
     */
    @Select("<script>" +
            "SELECT full_item_name, full_column_name, table_year, task_quarter, full_org_name, cell_value " +
            "FROM t_data_cell_wide " +
            "WHERE full_item_name = #{fullItemName} " +
            "AND full_column_name = #{fullColumnName} " +
            "AND table_year = #{tableYear} " +
            "AND task_quarter = #{taskQuarter} " +
            "<if test='orgNames != null and orgNames.size() > 0'>" +
            "AND (" +
            "<foreach collection='orgNames' item='orgName' separator=' OR '>" +
            "full_org_name LIKE CONCAT('%', #{orgName}, '%')" +
            "</foreach>" +
            ")" +
            "</if>" +
            "</script>")
    List<DataCellWide> queryByMultipleOrgNames(
            @Param("fullItemName") String fullItemName,
            @Param("fullColumnName") String fullColumnName,
            @Param("tableYear") String tableYear,
            @Param("taskQuarter") String taskQuarter,
            @Param("orgNames") List<String> orgNames
    );
}
